package command

import (
	"algo-sdk-go/common/tools"
	"algo-sdk-go/project/matchmaking/common/constant"
	"algo-sdk-go/project/matchmaking/domain/models/entity"
	"algo-sdk-go/project/matchmaking/domain/port/repo/ops"
)

type UserProfileCommand struct {
	// -------- 个人信息
	UserNum       int                    // 用户编号
	UserAvatar    []string               // 用户头像
	Name          string                 // 姓名
	Gender        constant.Gender        // 性别 Male / Female
	BirthDate     string                 // 生日
	Height        int                    // 身高,单位: cm
	Weight        int                    // 体重,单位: 斤
	MaritalStatus constant.MaritalStatus // 婚姻状态

	Education        constant.Education  // 学历状态
	Assets           constant.AssetInfo  // 个人资产
	IsPartyMember    bool                // 是否党员
	Occupation       constant.Occupation // 职业
	Hometown         string              // 籍贯，老家
	CurrentResidence string              // 常住地/现居住地/工作地
	FamilyInfo       constant.FamilyInfo // 家庭成员
	Status           string              // 相亲状态
	Verified         int                 // 1:验证过的会员； 2:未验证的非会员

	// 记录
	CreateUser string // 创建者
	ModifyUser string // 修改者
	Append     bool
}

func (u *UserProfileCommand) TransUserProfile() *entity.UserProfile {
	if u == nil {
		return &entity.UserProfile{}
	}
	return &entity.UserProfile{
		UserNum:        u.UserNum,
		UserAvatar:     u.UserAvatar,
		Name:           u.Name,
		Gender:         u.Gender,
		BirthDate:      u.BirthDate,
		Age:            0,
		ChineseZodiac:  "",
		Height:         u.Height,
		Weight:         u.Weight,
		BMIDesc:        "",
		MaritalStatus:  u.MaritalStatus,
		Education:      u.Education,
		EducationLevel: 0,
		Assets: constant.AssetInfo{
			AnnualIncome: u.Assets.AnnualIncome,
			Car:          u.Assets.Car,
			House:        u.Assets.House,
		},
		IsPartyMember:    u.IsPartyMember,
		Occupation:       u.Occupation,
		Hometown:         u.Hometown,
		CurrentResidence: u.CurrentResidence,
		FamilyInfo: constant.FamilyInfo{
			FamilyType: u.FamilyInfo.FamilyType,
			FatherDetail: constant.RelationDetail{
				Age:  u.FamilyInfo.FatherDetail.Age,
				Desc: u.FamilyInfo.FatherDetail.Desc,
			},
			MotherDetail: constant.RelationDetail{
				Age:  u.FamilyInfo.MotherDetail.Age,
				Desc: u.FamilyInfo.MotherDetail.Desc,
			},
			OtherDetail: u.FamilyInfo.OtherDetail,
		},
		Status:     u.Status,
		Verified:   u.Verified,
		CreateUser: u.CreateUser,
		CreateTime: tools.TimeNowStr(),
		ModifyUser: u.ModifyUser,
		UpdateTime: tools.TimeNowStr(),
	}
}

type MatchUserProfileCmd struct {
	Name          string                   // 姓名
	Gender        constant.Gender          // 性别 Male / Female
	Age           ops.AgeRange             // 年龄
	MinHeight     int                      // 身高,单位: cm
	MaxWeight     int                      // 体重,单位: 斤
	MaritalStatus []constant.MaritalStatus // 婚姻状态

	Education        ops.EducationRange    // 学历状态
	Assets           ops.AssetsRange       // 个人资产
	IsPartyMember    bool                  // 是否党员
	Occupation       []constant.Occupation // 职业
	Hometown         []string              // 籍贯，老家
	CurrentResidence []string              // 常住地/现居住地/工作地
	Status           string                // 相亲状态
}

type AppendUserprofileCommand struct {
	UserNum          int                    `json:"userNum"`          // 用户编号
	UserAvatar       []string               `json:"userAvatar"`       // 用户头像
	Gender           constant.Gender        `json:"gender"`           // 性别，男 / 女
	Height           int                    `json:"height"`           // 身高，单位：厘米
	Weight           int                    `json:"weight"`           // 体重，单位：斤
	BirthDate        string                 `json:"birthDate"`        // 生日，1992-08-15
	MaritalStatus    constant.MaritalStatus `json:"maritalStatus"`    // 婚姻状态，枚举值，未婚/离异/丧偶
	Assets           constant.AssetInfo     `json:"assets"`           // 个人资产状态
	Education        constant.Education     `json:"education"`        // 教育经历：枚举值：小学,初中,高中,中专,职高,技校,大专,本科,硕士,博士,博士后
	Occupation       constant.Occupation    `json:"occupation"`       // 职业，枚举值：公务员/教师/医生/护士/律师/法官/警察/自由职业者/经商
	Hometown         string                 `json:"hometown"`         // 籍贯，枚举值：广德、郎溪、宁国、宣城
	CurrentResidence string                 `json:"currentResidence"` // 现居住地/工作地， 枚举值：上海、杭州、合肥、北京、南京、芜湖
}
